#!/bin/bash

# v1.3 Check Internet Status
# Licencia GPL

echo $0 " - # INICIO"

# Determina si existe un elemento en un array
function ExistsElemento(){
  elements=${1}
  element=${2}
  for i in ${elements[@]} ; do
    #echo ${i} " : " ${2}
    if [ $i == $element ] ; then
      #echo "Repetido - :" ${2}
      return 1
    fi
  done
  #echo "No repetido - : " ${2}
  return 0
}

# Lista de URLs aleatorias
URLs[1]=http://speedtest1.sea1.speakeasy.net/speedtest/random500x500.jpg	
URLs[2]=http://speedtest1.sea1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[3]=http://speedtest1.sea1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[4]=http://speedtest1.sea1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[5]=http://speedtest1.sea1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[6]=http://speedtest1.sfo1.speakeasy.net/speedtest/random500x500.jpg	
URLs[7]=http://speedtest1.sfo1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[8]=http://speedtest1.sfo1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[9]=http://speedtest1.sfo1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[10]=http://speedtest1.sfo1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[11]=http://speedtest1.lax1.speakeasy.net/speedtest/random500x500.jpg	
URLs[12]=http://speedtest1.lax1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[13]=http://speedtest1.lax1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[14]=http://speedtest1.lax1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[15]=http://speedtest1.lax1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[16]=http://speedtest1.dfw1.speakeasy.net/speedtest/random500x500.jpg	
URLs[17]=http://speedtest1.dfw1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[18]=http://speedtest1.dfw1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[19]=http://speedtest1.dfw1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[20]=http://speedtest1.dfw1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[21]=http://speedtest1.chi1.speakeasy.net/speedtest/random500x500.jpg	
URLs[22]=http://speedtest1.chi1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[23]=http://speedtest1.chi1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[24]=http://speedtest1.chi1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[25]=http://speedtest1.chi1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[26]=http://speedtest1.atl1.speakeasy.net/speedtest/random500x500.jpg	
URLs[27]=http://speedtest1.atl1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[28]=http://speedtest1.atl1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[29]=http://speedtest1.atl1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[30]=http://speedtest1.atl1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[31]=http://speedtest1.nyc1.speakeasy.net/speedtest/random500x500.jpg	
URLs[32]=http://speedtest1.nyc1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[33]=http://speedtest1.nyc1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[34]=http://speedtest1.nyc1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[35]=http://speedtest1.nyc1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[36]=http://speedtest1.wdc1.speakeasy.net/speedtest/random500x500.jpg	
URLs[37]=http://speedtest1.wdc1.speakeasy.net/speedtest/random1000x1000.jpg	
URLs[38]=http://speedtest1.wdc1.speakeasy.net/speedtest/random2000x2000.jpg	
URLs[39]=http://speedtest1.wdc1.speakeasy.net/speedtest/random3000x3000.jpg	
URLs[40]=http://speedtest1.wdc1.speakeasy.net/speedtest/random4000x4000.jpg	
URLs[41]=http://www.testdevelocidad.es/speedtest/random500x500.jpg	
URLs[42]=http://www.testdevelocidad.es/speedtest/random1000x1000.jpg	
URLs[43]=http://www.testdevelocidad.es/speedtest/random2000x2000.jpg	
URLs[44]=http://www.testdevelocidad.es/speedtest/random3000x3000.jpg	
URLs[45]=http://www.testdevelocidad.es/speedtest/random4000x4000.jpg	
URLs[46]=http://testvsvll2.ono.es/speedtest/random500x500.jpg		
URLs[47]=http://testvsvll2.ono.es/speedtest/random1000x1000.jpg		
URLs[48]=http://testvsvll2.ono.es/speedtest/random2000x2000.jpg		
URLs[49]=http://testvsvll2.ono.es/speedtest/random3000x3000.jpg		
URLs[50]=http://testvsvll2.ono.es/speedtest/random4000x4000.jpg		
URLs[51]=http://host1.cablexnet.net/host2/speedtest/random500x500.jpg	
URLs[52]=http://host1.cablexnet.net/host2/speedtest/random1000x1000.jpg	
URLs[53]=http://host1.cablexnet.net/host2/speedtest/random2000x2000.jpg	
URLs[54]=http://host1.cablexnet.net/host2/speedtest/random3000x3000.jpg	
URLs[55]=http://host1.cablexnet.net/host2/speedtest/random4000x4000.jpg	
URLs[56]=http://speedtest.cyberneticos.net/speedtest/random500x500.jpg	
URLs[57]=http://speedtest.cyberneticos.net/speedtest/random1000x1000.jpg	
URLs[58]=http://speedtest.cyberneticos.net/speedtest/random2000x2000.jpg	
URLs[59]=http://speedtest.cyberneticos.net/speedtest/random3000x3000.jpg	
URLs[60]=http://speedtest.cyberneticos.net/speedtest/random4000x4000.jpg	
URLs[61]=http://speedtest.wdc01.softlayer.com/downloads/test10.zip
URLs[62]=http://speedtest.wdc01.softlayer.com/downloads/test100.zip
URLs[63]=http://speedtest.wdc01.softlayer.com/downloads/test500.zip
URLs[64]=http://london1.linode.com/100MB-london.bin
URLs[65]=http://tokyo1.linode.com/100MB-tokyo.bin
URLs[66]=http://fremont1.linode.com/100MB-fremont.bin
URLs[67]=http://newark1.linode.com/100MB-newark.bin
#
#
# URL que tras un testeo se ve que son las mejores
# Una vez que hemos establecido cuales son las mejores URLs solo hacemos random sobre ellas
# Para saber esto ejecutamos:
# sort -nrk1 -nrk2 /var/www/linap/datos/testvelocidad.URLs | uniq -w2


# Fecha del Script
DATE=$(date +"%Y-%m-%d %H:%M:00")

echo $0 " - # Date: " ${DATE}

# Almacenamos la fecha en el fichero de log
DATE_INICIO=${DATE}

# Definimos esta variable para curl. Para diferenciar entre decimales en español y en ingles
LANG=C

# Inicializamos la variables a 1, contará hasta un máximo de 5
count=1
max=0
TotalURLs=67
# He visto que el index 41 es el más rápido, voy a quitar las 5 random y poner solo 1 con el 41.
TotalRandom=1

echo $0 " - # TotalURLs: " ${TotalURLs} " - # TotalRandom: " ${TotalRandom}

# Definimos un array de 5 elementos
typeset elementoRANDOM[${TotalRandom}]

# FinDownload estará a 1 si se descarga y a 0 si no hay conectividad
FinDownload=0

# Bucle hasta x veces
while [ ${count} -le ${TotalRandom} ]
do
  echo -n $0 " - # i: " ${count}
  # Repetir hasta que el http Code sea 200 (ok)
  httpURLCode=500
  
  echo " "
  
  # Bucle
  while [ ${httpURLCode} -ne 200 ]; do
    # Con esto puede suceder que se repita el número aleatorio
    # No nos importa, esto va a a ser una media aritmética
    
    # Generamos un número aleatorio entre 1 y el máximo, el -n 1 indica que sólo se genere un número
    #ramdom=$(shuf -i 1-${TotalURLs} -n 1)
    # El número 41 es muy rápido, pongo el 63 porque es más lento y más real al durar más tiempo
    # random=41
    #ramdom=63
    ramdom=43
    echo -n $0 " - # URL: (${ramdom})" ${URLs[${ramdom}]} " --> "
    
    # Obtenemos el código de error de la URL a descargar
    httpURLCode=$(curl -o /dev/null -# -v --head --write-out '%{http_code}\n' ${URLs[${ramdom}]})
    echo ${httpURLCode} "(httpURLCode) "  
    
    # Si la URL existe podemos obtener la velocidad media
    if [ ${httpURLCode} -eq 200 ]; then
 
      # Comprobamos si existe el elemento obtenido en el array
      # echo "${elementoRANDOM} -- ${random}"
      ExistsElemento elementoRANDOM ${ramdom} 
      returnEXIST=$?
      # echo "Fin exists"
      
      # Si no existe lo añadimos al array
      if [ ${returnEXIST} -eq 0 ]; then
        # Almacenamos el elemento obtenido en un array
        elementoRANDOM[${count}]=${ramdom}
        #echo -n ${elementoRANDOM[@]}
      fi 
      
      #echo " "
      
      # En Curl la velocidad es es bytes por segundo, hasta Mbits que es en ONO * 8.
      #VELOCIDAD=$(echo "scale=2; `curl --silent -w "%{speed_download}" ${URLs[${ramdom}]} -o /dev/null` * 8" | bc)
      #wget -O /dev/null ${URLs[${ramdom}]} 2>&1 | sed -n '1,$ s/.*(\([0-9]*.*[0-9][0-9]* [GMK]\).*)*/\1/p'  
      VELOCIDAD=$(wget -O /dev/null ${URLs[${ramdom}]} 2>&1 | sed -n '1,$ s/.*(\([0-9]*.*[0-9][0-9]* [GMK]\).*)*/\1/p')
      #echo ${VELOCIDAD} | sed 's/M/\* 1024 \* 1024/' | sed 's/K/\* 1024/'
      VELOCIDAD=$(echo ${VELOCIDAD} | sed 's/M/\* 8/' | sed 's/K/\* 8 \/ 1024/' | bc)
      
      # Almacenamos la velocidad en columnas hasta n veces. Primero la fecha y después 5 descargas. Al final el Maximo 
      # Fecha Descarga1 Descarga2 Descarga3 Descarga4 Descarga5 Media
      VELOCIDAD_ACTUAL=${VELOCIDAD}

      # Para tener datos de cuanto fiable es una URL guardo lo que tarda cada URL. 
      # Así sabré si ese fichero es fiable alojado en ese hosting.
      # echo -e "${ramdom}\t${VELOCIDAD}" >> /var/www/linap/datos/testvelocidad.URLs

      # Calculamos el máximo
      echo $0 " - Maximo: " ${max}
      echo $0 " - Mb/s: " ${VELOCIDAD}
      
      retMAX=$(echo ${max}'>'${VELOCIDAD} | bc -l)
      
      if [ ${retMAX} -eq 0 ] ; then
        max=${VELOCIDAD}
      fi
      
      echo $0 " - New MAX: " ${max}
	  
	  # Variable a TRUE cuando termine bien
	  FinDownload=1
    fi
  done
  # Contador + 1
  count=`expr $count + 1`
done
	 

VELOCIDAD_MAX=${max}

# Grabamos los datos en el fichero de log
echo -ne "${DATE_INICIO}\t" >> /var/www/linap/datos/testvelocidad.datos
echo -ne "${VELOCIDAD_ACTUAL}\t" >> /var/www/linap/datos/testvelocidad.datos
echo -ne "${VELOCIDAD_MAX}\t" >> /var/www/linap/datos/testvelocidad.datos
echo "" >> /var/www/linap/datos/testvelocidad.datos

# Comprobamos si FinDownload
if [ ${FinDownload} -eq 0 ] ; then
   # Error en la conexión
   # Grabamos un 0 en el log
   DATE=$(date +"%Y-%m-%d %H:%M:00")
   echo $0 " - # CONNECTION ERROR at " $(DATE)
   echo -ne "0\t" >> /var/www/linap/datos/testvelocidad.datos 
   # echo -e "${ramdom}\t0" >> /var/www/linap/datos/testvelocidad.URLs
   max=0
fi

# Actualizamos el grafico de velocidad de descargas
echo $0 " - Creando grafica: testvelocidad.plot" 
gnuplot < /var/www/linap/datos/testvelocidad.plot
# Desactivamos la grafica de las diferentes URLs ya que ahora solo hay una.
# echo $0 " - Creando grafica: testvelocidad.plotURL"
# gnuplot < /var/www/linap/datos/testvelocidad.plotURL

datos=$(wc -l /var/www/linap/datos/testvelocidad.datos | cut -d ' ' -f 1)
echo $0 " - TotalLineas (datos): " $datos
if [ ${datos} -gt 100000 ]; then
	sed '1,10d' -i /var/www/linap/datos/testvelocidad.datos
	datos=$(wc -l  /var/www/linap/datos/testvelocidad.datos | cut -d ' ' -f 1)
	echo $0 " - TotalLineas (datos): " $datos
fi

# Desactivo esto por el momento, si quito lineas al final me quedo sin estadísticas
#datos=$(wc -l /var/www/linap/datos/testvelocidad.URLs | cut -d ' ' -f 1)
#echo $0 " - TotalLineas (URLs): " $datos
#if [ ${datos} -gt 100000 ]; then
#	sed '1,10d' -i /var/www/linap/datos/testvelocidad.URLs
#	datos=$(wc -l /var/www/linap/datos/testvelocidad.URLs | cut -d ' ' -f 1)
#	echo $0 " - TotalLineas (URLs): " $datos
#fi
echo $0 " - # FIN"

# Ejecutamos la inserción del total de datos de cada fecha en mysql
# Para el calendario
# Le paso la fecha y la velocidad para insertar en la base de datos en T_SPEED
/var/www/linap/scripts/./script_calendar.sh "${DATE}" "${VELOCIDAD}"

exit 0

